--  計算提款手續費

local httparg               = require("shared.api.httparg")
local response              = require("shared.api.response")
local config                = require("config")
local tag                   = httparg.tag()
local assertion             = httparg.assertion
local util                  = require "proxy.game.common.util"
local fill_response_header  = util.fill_response_header
local is_match_content_type = util.is_match_content_type
local get_content_decoder   = util.get_content_decoder
local ngx                   = _G.ngx
local httpclient            = require "shared.http.client"
local cjson                 = require "cjson.safe"
cjson.encode_max_depth(32)
cjson.decode_max_depth(32)


local ARGS = {
  tag.body('json','required'),

  id                  =tag.json.id                ('string',assertion.non_empty_string()),
  brand               =tag.json.brand             ('string',assertion.non_empty_string()),
  game                =tag.json.game              ('string',assertion.non_empty_string()),
  account             =tag.json.account           ('string',assertion.non_empty_string()),
  username            =tag.json.username          ('string',assertion.non_empty_string()),
  coin                =tag.json.coin              ('string',assertion.non_empty_string()),
  currency            =tag.json.currency          ('string',assertion.non_empty_string()),
  status              =tag.json.status            ('string',assertion.non_empty_string()),
  referencer_id       =tag.json.referencer_id     ('string',assertion.non_empty_string()),
  referencer_name     =tag.json.referencer_name   ('string',assertion.non_empty_string()),
  create_after        =tag.json.create_after      ('string',assertion.non_empty_string()),
  create_before       =tag.json.create_before     ('string',assertion.non_empty_string()),
  commit_after        =tag.json.commit_after      ('string',assertion.non_empty_string()),
  commit_before       =tag.json.commit_before     ('string',assertion.non_empty_string()),
  count               =tag.json.count             ('string',assertion.non_empty_string()),
  offset              =tag.json.offset            ('string',assertion.non_empty_string()),
}

do
  local location = config.ENV.DATAGATE_SERVICE.. "/round"
  local headers  = ngx.req.get_headers()
  local query    = nil
  local method   = "LIST"
  do
      -- add X-Forwarded-For header
      headers['X-Forwarded-For'] = ngx.var.proxy_add_x_forwarded_for
  end


  --移除方法设定
  local rmvLowKey="x-http-method-override"
  --移除gzip设定
  local rmvKey2="accept-encoding"
  for k,v in pairs(headers) do
      local low=string.lower(k)
      if low==rmvLowKey  or low==rmvKey2   then
          headers[k]=nil
      end
  end


  local bodyMap         = {
        id              = ARGS.id,
        brand           = ARGS.brand,
        game            = ARGS.game ,
        account         = ARGS.account ,
        username        = ARGS.username ,
        coin            = ARGS.coin ,
        currency        = ARGS.currency ,
        status          = ARGS.status ,
        referencer_id   = ARGS.referencer_id ,
        referencer_name = ARGS.referencer_name ,
        create_after    = ARGS.create_after ,
        create_before   = ARGS.create_before,
        commit_after    = ARGS.commit_after ,
        commit_before   = ARGS.commit_before ,
        count           = ARGS.count ,
        offset          = ARGS.offset
  }

  local requestData     = cjson.encode(bodyMap)

  local resp, err       = httpclient.new()
                              :uri(location)
                              :headers(headers)
                              :query(query)
                              :body(requestData)
                              :send(method, 2000, nil)

  if err or (not resp) then
      ngx.status = 500
      ngx.say(err)
      ngx.exit(ngx.OK)
  end

  if not resp.body
          or not resp.headers
          or resp.status ~= 200
          or not is_match_content_type(resp, 'application/json')  then

      ngx.status = resp.status
      fill_response_header(resp.headers)
      ngx.say(resp.body)
      ngx.exit(ngx.OK)
  end

  local respBody
  local contentDecoder = get_content_decoder(resp)
  if contentDecoder then
              respBody = contentDecoder.decode(resp.body)
  else
      -- 这儿理论上不应该出错
      ngx.status = 500
      ngx.say(err)
      ngx.exit(ngx.OK)
  end
  response.success(respBody)
end